import moment from './moment'
export function formatNumber(n) {
	if (n) {
		n = n.toString()
		return n[1] ? n : '0' + n
	} else {
		return '00'
	}
}

export function unix(time) {
	return moment(time).unix()
}

export function  timeStamp(time){
	if(!time){
		return false
	}
	return moment(time).format("x")
}


// 获取moment时间对象  2022-02-14T18:01:54.253 2022-02-14 18:10:20   2022/02/14/18/10/20   new Date()  new Date(1645089553332)
export function getMoment(current, form = 'YYYY-MM-DD HH:mm:ss') {
	if (current) {
		if (moment.isDate(current)) { // new Date()  new Date(1645089553332)
			current = moment(current)
		} else {
			current = moment(current, form)
		}
	} else {
		current = moment()
	}
	return current
}


/**
 * 格式化日期为字符串
 * @param date  格式参考getMoment()的第一个参数
 * @param fmt 处理后格式
 * @param form 日期对象格式
 * @returns {string}
 */
export function formatDate(date, fmt = 'YYYY-MM-DD', form = 'YYYY-MM-DD HH:mm:ss') {
	date = getMoment(date, form)
	return date.format(fmt)
}


/**
 * 倒计时：天时分秒
 * @param {time} value 剩余时间的时间戳
 * @param {isMill} 是否毫秒单位  
 */
export function countTime(time,isMill=true) {
	let nextTime = time - 1
	let dateDiff = time
	if(isMill){
		nextTime = time - 1000
		dateDiff = Math.floor(time/1000)
	}

	let hours = 0
	let minute = 0
	let second = 0

	var day = Math.floor(dateDiff / (24 * 3600)); //计算出相差天数
	var leave1 = dateDiff % (24 * 3600) //计算天数后剩余的秒数
	hours = Math.floor(leave1 / (3600)) //计算出小时数
	//计算相差分钟数
	var leave2 = leave1 % (3600) //计算小时数后剩余的秒数
	minute = Math.floor(leave2 / (60)) //计算相差分钟数
	//计算相差秒数
	second = leave2 % (60) //计算分钟数后剩余的秒数
	return {
		hours: hours >= 10 ? hours : '0' + hours,
		minute: minute >= 10 ? minute : '0' + minute,
		second: second >= 10 ? second : '0' + second,
		day,
		nextTime: nextTime
	}
}


/**
 * 创建日历对象
 * @param date 日期 2021-04-24T09:36:43.477  / new Date()  / new Date(1619229857335)
 * @param fmt 日期格式
 */
export function getDateObject(date, fmt = 'YYYY/MM/DD') {
	if (!date) date = new Date()
	if (!moment.isDate(date)) {
		date = moment(date, fmt).toDate()
	}
	if (!moment.isDate(date)) return ''
	let year = date.getFullYear()
	let month = date.getMonth() + 1
	let day = date.getDate()
	// 总天数
	let days = new Date(year, month, 0).getDate()
	let firDay = new Date(year + '/' + month + '/' + '01').getDay()
	let lasDay = new Date(year + '/' + month + '/' + days).getDay()
	let befDate = ''
	if ((month - 1) > 0) {
		befDate = year + '/' + formatNumber((month - 1)) + '/' + '01'
	} else {
		befDate = (year - 1) + '/' + 12 + '/' + '01'
	}
	let aftDate = ''
	if (month > 11) {
		aftDate = (year + 1) + '/' + '01' + '/' + '01'
	} else {
		aftDate = year + '/' + formatNumber((month + 1)) + '/' + '01'
	}
	let befDay = moment(new Date(date.getTime() - 24 * 60 * 60 * 1000)).format('YYYY/MM/DD')
	let aftDay = moment(new Date(date.getTime() + 24 * 60 * 60 * 1000)).format('YYYY/MM/DD')
	let nowDate = new Date().getDate()
	let fullDate = year + '/' + formatNumber(month) + '/' + formatNumber(nowDate)
	return new Object({
		year, //年
		month, //月
		date: day, //日
		fullDate, //当前时间 2019/12/01
		days, //本月总天数
		firDay: firDay === 0 ? 7 : firDay, //第一天是周几，0代表周日
		lasDay, //最后一天是周几
		befDate, //上个月一号日期 2019/12/01
		aftDate, //下个月一号日期
		befDay, //前一天日期
		aftDay //后一天日期
	})
}

/**
 * 日期比较，第一个时间是否在第二个时间之后
 * @param firDate 格式参考getMoment()的第一个参数
 * @param secDate 格式参考getMoment()的第一个参数
 * @param firForm
 * @param secForm
 * @returns {boolean}
 */
export function isAfter(firDate, secDate, firForm = 'YYYY-MM-DD HH:mm:ss', secForm = 'YYYY-MM-DD HH:mm:ss') {
	firDate = getMoment(firDate, firForm)
	secDate = getMoment(secDate, secForm)
	return firDate.isAfter(secDate)
}

/**
 * 日期比较，第一个时间是否在第二个时间之前
 * @param firDate 不能是时间戳
 * @param secDate
 * @param firForm // 第一个时间如果是字符串，需要声明是什么格式的
 * @param secForm
 * @returns {boolean}
 */
export function isBefore(firDate, secDate, firForm = 'YYYY-MM-DD HH:mm:ss', secForm = 'YYYY-MM-DD HH:mm:ss') {
	firDate = getMoment(firDate, firForm)
	secDate = getMoment(secDate, secForm)
	return moment(firDate).isBefore(secDate)
}

/**
 * 日期距当前时间  (15分钟前，1小时前)
 * @param date
 * @param form
 * @returns {*}
 */
export function getDateFromNow(date, form = 'YYYY-MM-DD HH:mm:ss') {
	date = getMoment(date, form)
	return date.fromNow()
}

/**
 * 获取两个日期间的时间差
 * @param start 开始日期
 * @param end 结束日期
 * @param type 差值类型  years、months、weeks、days、hours、minutes 和 seconds
 * @param form 转换类型
 */
export function getDiff(start, end, type = 'days', form = 'YYYY-MM-DD HH:mm:ss') {
	if (start && end) {
		start = getMoment(start, form)
		end = getMoment(end, form)
		return end.diff(start, type)
	} else {
		return 0
	}
}

/**
 *
 * @param current
 * @param value
 * @param type
 * @param form
 * @returns {moment.Moment}
 */
export function addDate(current, value = 1, type = 'days', form = 'YYYY-MM-DD HH:mm:ss') {
	current = getMoment(current, form)
	return current.add(value, type)
}
